package entity

import "time"

// API 表示一个API定义
// API结构体用于描述系统中的接口信息
// 包含接口的唯一标识、名称、描述、请求方法、路径、关联连接、查询语句及创建和更新时间
// 便于统一管理和调用API
//
type API struct {
	ID           string    `json:"id" gorm:"primaryKey;column:id"`                       // API ID
	Name         string    `json:"name" gorm:"size:100;not null;column:name"`            // API 名称
	Description  string    `json:"description" gorm:"size:500;column:description"`       // API 描述
	Path         string    `json:"path" gorm:"size:200;not null;column:path"`            // API 路径
	Method       string    `json:"method" gorm:"size:10;not null;column:method"`         // API 方法
	ServiceID    string    `json:"service_id" gorm:"size:36;not null;column:service_id"` // 关联的服务ID
	ConnectionID int64     `json:"connection_id" gorm:"not null;column:connection_id"`   // 关联的数据库连接ID
	Status       int       `json:"status" gorm:"default:0;column:status"`                // 0: 未发布, 1: 已发布
	Version      int       `json:"version" gorm:"default:1;column:version"`              // API 版本
	CreatedAt    time.Time `json:"created_at" gorm:"column:created_at"`                  // 创建时间
	UpdatedAt    time.Time `json:"updated_at" gorm:"column:updated_at"`                  // 更新时间
}

// APIVersion API版本实体
type APIVersion struct {
	ID            string    `json:"id" gorm:"primaryKey;column:id"`                        // API版本ID
	APIID         string    `json:"api_id" gorm:"size:50;not null;column:api_id"`          // 关联的API ID
	Version       string    `json:"version" gorm:"size:20;not null;column:version"`        // API版本
	Description   string    `json:"description" gorm:"size:500;column:description"`        // API版本描述
	SQLContent    string    `json:"sql_content" gorm:"type:text;column:sql_content"`       // SQL查询语句
	ParamsContent string    `json:"params_content" gorm:"type:text;column:params_content"` // 参数定义（JSON格式）
	Status        int       `json:"status" gorm:"default:0;column:status"`                 // 0: 草稿, 1: 已发布
	CreatedAt     time.Time `json:"created_at" gorm:"column:created_at"`                   // 创建时间
	UpdatedAt     time.Time `json:"updated_at" gorm:"column:updated_at"`                   // 更新时间
}

// APIDoc API文档实体
type APIDoc struct {
	ID        string    `json:"id" gorm:"primaryKey;column:id"`               // API文档ID
	APIID     string    `json:"api_id" gorm:"size:50;not null;column:api_id"` // 关联的API ID
	Content   string    `json:"content" gorm:"type:text;column:content"`      // Markdown格式的文档内容
	CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`          // 创建时间
	UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`          // 更新时间
}

// APICall API调用记录实体
// 合并了原有的APICallRecord和APICallLog的功能
// 用于记录API的调用情况，包括调用时间、调用者、请求参数、响应结果等信息
type APICall struct {
	ID          string    `json:"id" gorm:"primaryKey;column:id"`                   // 调用记录ID
	APIID       string    `json:"api_id" gorm:"size:50;not null;column:api_id"`     // 关联的API ID
	Version     string    `json:"version" gorm:"size:20;not null;column:version"`   // API版本
	Caller      string    `json:"caller" gorm:"size:50;not null;column:caller"`     // 调用者
	RequestIP   string    `json:"request_ip" gorm:"size:50;column:request_ip"`      // 请求IP
	RequestTime time.Time `json:"request_time" gorm:"not null;column:request_time"` // 请求时间
	Params      string    `json:"params" gorm:"type:text;column:params"`            // 请求参数（JSON格式）
	Result      string    `json:"result" gorm:"type:text;column:result"`            // 响应结果（JSON格式）
	Status      int       `json:"status" gorm:"default:0;column:status"`            // 状态：0-失败，1-成功
	ErrorMsg    string    `json:"error_msg" gorm:"size:500;column:error_msg"`       // 错误信息
	Duration    int64     `json:"duration" gorm:"column:duration"`                  // 执行时长（毫秒）
	CreatedAt   time.Time `json:"created_at" gorm:"column:created_at"`              // 创建时间
	UpdatedAt   time.Time `json:"updated_at" gorm:"column:updated_at"`              // 更新时间
}

// APIStatistics API调用统计信息
type APIStatistics struct {
	TotalCalls    int64     `json:"total_calls"`    // 总调用次数
	SuccessCalls  int64     `json:"success_calls"`  // 成功调用次数
	FailedCalls   int64     `json:"failed_calls"`   // 失败调用次数
	AvgDuration   float64   `json:"avg_duration"`   // 平均执行时长（毫秒）
	MaxDuration   int64     `json:"max_duration"`   // 最大执行时长（毫秒）
	MinDuration   int64     `json:"min_duration"`   // 最小执行时长（毫秒）
	StartTime     time.Time `json:"start_time"`     // 统计开始时间
	EndTime       time.Time `json:"end_time"`       // 统计结束时间
	Callers       []string  `json:"callers"`        // 调用者列表
	ErrorMessages []string  `json:"error_messages"` // 错误信息列表
	SuccessRate   float64   `json:"success_rate"`   // 成功率
	CallTrend     []int64   `json:"call_trend"`     // 调用趋势（按小时统计）
	DurationTrend []float64 `json:"duration_trend"` // 执行时长趋势（按小时统计）
	ErrorTrend    []int64   `json:"error_trend"`    // 错误趋势（按小时统计）
}

// TableName 指定表名
func (API) TableName() string {
	return "apis"
}

func (APIVersion) TableName() string {
	return "api_versions"
}

func (APIDoc) TableName() string {
	return "api_docs"
}

func (APICall) TableName() string {
	return "api_calls"
}
